<?php

namespace app\model;

use support\Model;

/**
 * 购物车表结构说明（对应数据库迁移 @20250819055029_create_cart_table_migration.php）
 * 
 * 字段:
 * - id           int      主键，自增ID
 * - user_id      int      用户ID
 * - goods_id     int      商品ID
 * - spec     string   规格（格式如 a@b@c）
 * - quantity     int      数量
 * - created_at   int      创建时间（时间戳）
 * - updated_at   int      更新时间（时间戳）
 */

class CartModel extends Model
{
    /**
     * 关联表名
     * @var string
     */
    protected $table = 'cart';

    /**
     * 主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 关闭自动时间戳
     * @var bool
     */
    public $timestamps = false;

    /**
     * 可批量赋值字段
     * @var array
     */
    protected $fillable = [
        'user_id',
        'goods_id', 
        'spec',
        'quantity',
        'created_at',
        'updated_at',
        'sku_id'
    ];

    /**
     * 隐藏字段
     * @var array
     */
    protected $hidden = [
        // 可以隐藏敏感字段
    ];

    /**
     * 类型转换
     * @var array
     */
    protected $casts = [
        'created_at' => 'integer',
        'updated_at' => 'integer',
        'quantity' => 'integer'
    ];

    /**
     * 与商品模型的关联关系
     */
    public function goods()
    {
        return $this->belongsTo(GoodsModel::class, 'goods_id', 'id');
    }

    /**
     * 与用户的关联关系
     */
    public function user()
    {
        return $this->belongsTo(UserModel::class, 'user_id', 'id');
    }

    /**
     * 与SKU的关联关系
     */
    public function sku()
    {
        return $this->belongsTo(GoodsKuModel::class, 'goods_id', 'goods_id')
                    ->where('specs', $this->spec);
    }

    /**
     * 获取商品价格（优先使用SKU价格）
     */
    public function getPriceAttribute()
    {
        if ($this->sku && $this->sku->price) {
            return $this->sku->price;
        }
        
        return $this->goods ? $this->goods->price : 0;
    }

    /**
     * 获取小计价格
     */
    public function getSubtotalAttribute()
    {
        return $this->price * $this->quantity;
    }
} 